home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
fish
/
676-700
/
681
/
term
/
source.lha
/
PhonePanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-09
|
33KB
|
1,230 lines
/*
** $Id: PhonePanel.c,v 1.6 92/04/21 16:59:22 olsen Sta Locker: olsen $
** $Revision: 1.6 $
** $Date: 92/04/21 16:59:22 $
**
** The phonebook and support routines
**
** Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
** All Rights Reserved
*/
#include "termGlobal.h"
enum { GAD_PHONENUMBER,GAD_EDIT,GAD_NAME,GAD_NAMELIST,GAD_PLAYNUMBER,
GAD_CLEARLIST,GAD_NEWENTRY,GAD_REMOVEENTRY,GAD_LOADLIST,
GAD_SAVELIST,GAD_SORTLIST,GAD_CLONEENTRY,GAD_DIALLIST,GAD_PASSWORD };
enum { EDIT_SERIAL,EDIT_MODEM,EDIT_TRANSFER,EDIT_SCREEN,EDIT_TERMINAL,
EDIT_COMMANDS,EDIT_UNITS,EDIT_MISC,EDIT_PATHS,EDIT_KEYMACROS,
EDIT_FASTMACROS,EDIT_PASSWORD,EDIT_COPY };
#define WIDTH 630
#define HEIGHT 171
STATIC struct List EditList;
STATIC struct Node EditNode[13];
STATIC UBYTE *EditName[13] =
{
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
};
STATIC struct Gadget *
CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
{
struct Gadget *Gadget;
struct NewGadget NewGadget;
UWORD Counter = 0;
LocalizeString(EditName,MSG_PHONEPANEL_SERIAL_TXT,MSG_PHONEPANEL_COPY_CONFIG_TXT);
memset(&NewGadget,0,sizeof(struct NewGadget));
if(Gadget = CreateContext(GadgetList))
{
WORD i;
NewList(&EditList);
for(i = 0 ; i < 13 ; i++)
{
EditNode[i] . ln_Name = EditName[i];
AddTail(&EditList,&EditNode[i]);
}
NewGadget . ng_LeftEdge = 114;
NewGadget . ng_TopEdge = 103;
NewGadget . ng_Width = 337;
NewGadget . ng_Height = 14;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD);
NewGadget . ng_TextAttr = &DefaultFont;
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = PLACETEXT_LEFT;
NewGadget . ng_VisualInfo = VisualInfo;
GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
GTST_MaxChars, 49,
GTST_EditHook, &CommandHook,
GA_Disabled, TRUE,
GA_Immediate, TRUE,
TAG_DONE);
NewGadget . ng_LeftEdge = 453;
NewGadget . ng_TopEdge = 12;
NewGadget . ng_Width = 171;
NewGadget . ng_Height = 158 - 17;
NewGadget . ng_GadgetText = NULL;
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = 0;
GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
GTLV_Labels, &EditList,
TAG_DONE);
NewGadget . ng_Width = 337;
NewGadget . ng_Height = 14;
NewGadget . ng_LeftEdge = 114;
NewGadget . ng_TopEdge = 88;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD);
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = PLACETEXT_LEFT;
GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
GTST_MaxChars, 29,
GTST_EditHook, &CommandHook,
GA_Disabled, TRUE,
GA_Immediate, TRUE,
TAG_DONE);
NewGadget . ng_LeftEdge = 114;
NewGadget . ng_TopEdge = 12;
NewGadget . ng_Height = 77;
NewGadget . ng_GadgetText = LocaleString(MSG_GLOBAL_NAME_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
TAG_DONE);
NewGadget . ng_LeftEdge = 227;
NewGadget . ng_TopEdge = 152;
NewGadget . ng_Width = 111;
NewGadget . ng_Height = 16;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_PLAY_NUMBER_GAD);
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = PLACETEXT_IN;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_TopEdge = 135;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_CLEAR_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_LeftEdge = 114;
NewGadget . ng_TopEdge = 118;
NewGadget . ng_Width = 106;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_NEW_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
TAG_DONE);
NewGadget . ng_TopEdge = 152;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_REMOVE_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_LeftEdge = 345;
NewGadget . ng_TopEdge = 118;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_LOAD_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
TAG_DONE);
NewGadget . ng_TopEdge = 152;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SAVE_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_TopEdge = 135;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SORT_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_LeftEdge = 114;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_CLONE_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_LeftEdge = 227;
NewGadget . ng_TopEdge = 118;
NewGadget . ng_Width = 111;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_DIAL_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_Width = 171;
NewGadget . ng_Height = 16;
NewGadget . ng_LeftEdge = 453;
NewGadget . ng_TopEdge = 11 + 158 - 17;
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SET_PASSWORT_GAD);
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = 0;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
}
return(Gadget);
}
BYTE
PhonePanel()
{
STATIC WORD OffsetX = -1,OffsetY = -1;
struct Window *PanelWindow;
struct Gadget *GadgetList = NULL;
struct Gadget *GadgetArray[GAD_PASSWORD + 1];
ULONG Sec1,Mic1,Sec2,Mic2;
LONG HitItem = -1;
if(CreateAllGadgets(&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
{
if(OffsetX == -1)
OffsetX = (Screen -> Width - WIDTH) >> 1;
if(OffsetY == -1)
OffsetY = (Screen -> Height - HEIGHT) >> 1;
if(PanelWindow = OpenWindowTags(NULL,
WA_Left, OffsetX,
WA_Top, OffsetY,
WA_Width, WIDTH,
WA_Height, HEIGHT,
WA_Activate, TRUE,
WA_DragBar, TRUE,
WA_DepthGadget, TRUE,
WA_RMBTrap, TRUE,
WA_DepthGadget, TRUE,
WA_CloseGadget, TRUE,
WA_CustomScreen,Screen,
WA_IDCMP, IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | STRINGIDCMP | BUTTONIDCMP | LISTVIEWIDCMP,
WA_Title, LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),
TAG_DONE))
{
struct IntuiMessage *Massage;
ULONG Class,Code;
struct Gadget *Gadget;
BYTE Terminated = FALSE;
UBYTE DummyBuffer[256],*DummyChar;
LONG Selected = ~0,
Count = -1,i;
struct List *PhoneList = NULL;
struct PhoneNode *TempNode;
struct FileRequest *FileRequest;
PushWindow(PanelWindow);
AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
GT_RefreshWindow(PanelWindow,NULL);
if(Phonebook && NumPhoneEntries)
{
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,PhoneList,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
}
}
}
ActiveGadget = NULL;
FreeDialList();
for(i = 0 ; i < NumPhoneEntries ; i++)
{
if(Phonebook[i] -> Count > Count)
Count = Phonebook[i] -> Count;
}
Count++;
if(Count)
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
while(!Terminated)
{
WaitPort(PanelWindow -> UserPort);
while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
{
Class = Massage -> Class;
Code = Massage -> Code;
Gadget = (struct Gadget *)Massage -> IAddress;
GT_ReplyIMsg(Massage);
if(Class == IDCMP_VANILLAKEY)
{
switch(Code)
{
case ' ': if(Selected != -1)
{
HitItem = -1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(Phonebook[Selected] -> Count == -1)
{
if(!Count)
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
Phonebook[Selected] -> Count = Count++;
SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Name);
}
else
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
}
break;
default: KeySelect(GadgetArray,GAD_PASSWORD,Code,PanelWindow,&Gadget,&Class,&Code);
break;
}
}
if(Class == IDCMP_GADGETDOWN)
{
if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
ActiveGadget = Gadget;
}
if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
ActivateGadget(ActiveGadget,PanelWindow,NULL);
if(Class == IDCMP_CLOSEWINDOW)
{
FreeDialList();
Terminated = TRUE;
}
if(Class == IDCMP_GADGETUP)
{
switch(Gadget -> GadgetID)
{
case GAD_NAMELIST:
if(HitItem != Code)
{
HitItem = Code;
CurrentTime(&Sec1,&Mic1);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Code] -> Name,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Code] -> Number,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
Selected = Code;
}
else
{
CurrentTime(&Sec2,&Mic2);
if(DoubleClick(Sec1,Mic1,Sec2,Mic2))
{
HitItem = -1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(Phonebook[Selected] -> Count == -1)
{
if(!Count)
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
Phonebook[Selected] -> Count = Count++;
SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Name);
}
else
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
}
Sec1 = Sec2;
Mic1 = Mic2;
}
break;
case GAD_CLEARLIST:
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
Count = 0;
for(i = 0 ; i < NumPhoneEntries ; i++)
{
SPrintf(Phonebook[i] -> Node -> LocalName," %s",Phonebook[i] -> Name);
Phonebook[i] -> Count = -1;
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
break;
case GAD_PLAYNUMBER:
if(Selected != ~0)
{
UBYTE *String = Phonebook[Selected] -> Number;
ExtractString(String,DummyBuffer,FALSE);
BlockWindow(PanelWindow);
if(!ToneDial(DummyBuffer))
MyEasyRequest(NULL,LocaleString(MSG_GLOBAL_TERM_HAS_A_PROBLEM_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),LocaleString(MSG_GLOBAL_FAILED_TO_ALLOCATE_RESOURCES_FOR_PLAYING_TXT));
ReleaseWindow(PanelWindow);
}
break;
case GAD_NEWENTRY:
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(NewPhoneEntry())
{
if(PhoneList = CreatePhoneList())
{
Selected = NumPhoneEntries - 1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Name,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Number,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
if(NumPhoneEntries == 1)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
if(NumPhoneEntries == 2)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
ActivateGadget(GadgetArray[GAD_NAME],PanelWindow,NULL);
ActiveGadget = GadgetArray[GAD_NAME];
}
else
goto ClearList;
}
else
goto ClearList;
break;
case GAD_CLONEENTRY:
if(Selected != ~0)
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(NewPhoneEntry())
{
if(PhoneList = CreatePhoneList())
{
LONG Tmp = Selected;
Selected = NumPhoneEntries - 1;
CopyMem(Phonebook[Tmp] -> Name,Phonebook[Selected] -> Name,sizeof(struct PhoneEntry) - (sizeof(struct PhoneNode) + sizeof(LONG)));
SPrintf(Phonebook[Selected] -> Node -> LocalName," %s",Phonebook[Selected] -> Name);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Name,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Number,
TAG_DONE);
}
else
goto ClearList;
}
else
goto ClearList;
}
break;
case GAD_REMOVEENTRY:
if(Selected != ~0)
{
if(Phonebook[Selected] == ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(Phonebook[Selected] -> Count != -1)
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
RemPhoneEntry(Selected);
if(NumPhoneEntries > 0)
{
if(PhoneList = CreatePhoneList())
{
if(Selected == NumPhoneEntries)
Selected--;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Name,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Number,
TAG_DONE);
}
else
goto ClearList;
if(NumPhoneEntries == 1)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
else
{
ClearList: GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, &EmptyList,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
ActiveGadget = NULL;
Selected = ~0;
HitItem = -1;
}
}
}
break;
case GAD_NAME:
if(Selected != ~0)
{
strcpy(Phonebook[Selected] -> Name,GT_STRING(GadgetArray[GAD_NAME]));
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,~0,
TAG_DONE);
if(PhoneList)
DeletePhoneList(PhoneList);
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
}
}
break;
case GAD_PHONENUMBER:
if(Selected != ~0)
strcpy(Phonebook[Selected] -> Number,GT_STRING(GadgetArray[GAD_PHONENUMBER]));
break;
case GAD_LOADLIST:
BlockWindow(PanelWindow);
if(ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
else
{
strcpy(DummyBuffer,LastPhone);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"term#?",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
{
if(PhoneList)
DeletePhoneList(PhoneList);
PhoneList = NULL;
if(!LoadPhonebook(DummyBuffer))
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_LOAD_PHONEBOOK_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
FreeDialList();
}
Count = 0;
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
ActiveGadget = NULL;
if(PhoneList)
{
if(!PhoneList -> lh_Head -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
}
Selected = ~0;
HitItem = -1;
FreeAslRequest(FileRequest);
}
}
ReleaseWindow(PanelWindow);
break;
case GAD_SORTLIST:
if(NumPhoneEntries > 1)
{
BlockWindow(PanelWindow);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
ActiveGadget = NULL;
if(PhoneList)
DeletePhoneList(PhoneList);
SortPhoneEntries();
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, ~0,
TAG_DONE);
}
Selected = ~0;
HitItem = -1;
ReleaseWindow(PanelWindow);
}
break;
case GAD_SAVELIST:
if(NumPhoneEntries)
{
strcpy(DummyBuffer,LastPhone);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
BlockWindow(PanelWindow);
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"term#?",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
{
if(!SavePhonebook(DummyBuffer))
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_CREATE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
FreeAslRequest(FileRequest);
}
ReleaseWindow(PanelWindow);
}
break;
case GAD_PASSWORD:
BlockWindow(PanelWindow);
{
struct Gadget *OldActiveGadget = ActiveGadget;
memset(SharedBuffer,0,20);
PhonePasswordUsed = FALSE;
if(xpr_gets(LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SharedBuffer))
{
if(SharedBuffer[0])
{
SharedBuffer[20] = 0;
Encrypt(SharedBuffer,20,PhonePassword,SharedBuffer,strlen(SharedBuffer),TRUE);
PhonePasswordUsed = TRUE;
}
}
ActiveGadget = OldActiveGadget;
}
ReleaseWindow(PanelWindow);
break;
case GAD_EDIT:
if(Selected != ~0)
{
BlockWindow(PanelWindow);
switch(Code)
{
case EDIT_SERIAL: SerialPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_MODEM: ModemPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_TRANSFER: strcpy(DummyBuffer,LastXprLibrary);
if(SelectProtocol(Phonebook[Selected] -> Config . Protocol,PanelWindow))
strcpy(Phonebook[Selected] -> Config . Protocol,LastXprLibrary);
strcpy(LastXprLibrary,DummyBuffer);
break;
case EDIT_SCREEN: ScreenPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_TERMINAL: TerminalPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_COMMANDS: CommandPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_MISC: MiscPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_PATHS: PathPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_UNITS: if(Phonebook[Selected] == ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
RatePanel(PhoneList,Phonebook[Selected]);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
}
break;
case EDIT_KEYMACROS: strcpy(DummyBuffer,Phonebook[Selected] -> Config . MacroFile);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_KEYBOARD_MACROS_TXT),DummyBuffer,FilePart(Phonebook[Selected] -> Config . MacroFile),DummyBuffer,"term#?",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT)))
{
strcpy(Phonebook[Selected] -> Config . MacroFile,DummyBuffer);
FreeAslRequest(FileRequest);
}
break;
case EDIT_FASTMACROS: strcpy(DummyBuffer,Phonebook[Selected] -> Config . FastMacroFile);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_FAST_MACROS_TXT),DummyBuffer,FilePart(Phonebook[Selected] -> Config . FastMacroFile),DummyBuffer,"term#?",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT)))
{
strcpy(Phonebook[Selected] -> Config . FastMacroFile,DummyBuffer);
FreeAslRequest(FileRequest);
}
break;
case EDIT_PASSWORD: PasswordUserPanel(Phonebook[Selected]);
break;
case EDIT_COPY: CopyPanel(&Phonebook[Selected] -> Config);
break;
}
ActiveGadget = GadgetArray[GAD_NAME];
ReleaseWindow(PanelWindow);
}
else
{
if(Code == EDIT_COPY)
{
BlockWindow(PanelWindow);
CopyPanel(NULL);
if(!GT_DISABLED(GadgetArray[GAD_NAME]))
ActiveGadget = GadgetArray[GAD_NAME];
else
ActiveGadget = NULL;
ReleaseWindow(PanelWindow);
}
}
break;
case GAD_DIALLIST:
if(Count)
{
FreeDialList();
TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
while(TempNode -> VanillaNode . ln_Succ)
{
if(TempNode -> Entry -> Count != -1)
SortToList(TempNode);
TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
}
Terminated = TRUE;
}
break;
default: break;
}
}
}
}
DeleteTone();
if(PhoneList)
DeletePhoneList(PhoneList);
RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
PopWindow();
OffsetX = PanelWindow -> LeftEdge;
OffsetY = PanelWindow -> TopEdge;
CloseWindow(PanelWindow);
}
}
FreeGadgets(GadgetList);
if(DialList)
return(TRUE);
else
return(FALSE);
}